// 1004 medium 最大连续1的个数 III

// 给定一个由若干 0 和 1 组成的数组 A，我们最多可以将 K 个值从 0 变成 1 。
// 返回仅包含 1 的最长（连续）子数组的长度。
//
//
// 示例 1：
// 输入：A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
// 输出：6
// 解释：
// [1,1,1,0,0,1,1,1,1,1,1]
// 粗体数字从 0 翻转到 1，最长的子数组长度为 6。
// 示例 2：
// 输入：A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
// 输出：10
// 解释：
// [0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
// 粗体数字从 0 翻转到 1，最长的子数组长度为 10。
//  
// 提示：
// 1 <= A.length <= 20000
// 0 <= K <= A.length
// A[i] 为 0 或 1 
//

/**
 * 滑动窗口解法
 * @param {number[]} A
 * @param {number} K
 * @return {number}
 */
var longestOnes = function(A, K) {
    // A是数组
    if(!A.length)return 0;
    
    let l = 0;
    let r = 0;
    let max = r - l;
    let k = K;
    while(r < A.length){
        // 只要是1，不需要消费K，继续向右扩容窗口
        if(A[r] === 1){
            r++;
        }else{
            // K被消费完了
            if(k === 0){
                // l往前进，如果当前是0，则多出一个可以消费的1
                if(A[l] === 0){
                    k++;
                }
                l++;
                
                // K还没有消费完
            }else{
                k--;
                r++;
            }
        }
        
        // 更新长度
        max = Math.max(max, r - l);
    }
    return max;
};

console.log(longestOnes([1,1,1,0,0,0,1,1,1,1,0], 2))
console.log(longestOnes([0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], 3))